perm filename PURGE.SAI[SYS,HE]23 blob
sn#128402 filedate 1974-10-28 generic text, type C, neo UTF8
COMMENT ⊗ VALID 00010 PAGES
C REC PAGE DESCRIPTION
C00001 00001
C00002 00002 BEGIN "PURGE"
C00005 00003 ⊃ This is the magic macro which defines good files
C00008 00004 ⊃ CAMERA CALIBRATION
C00011 00005 ZZ(TOWER,NUL), ⊃ TOWER OF HANOI PROGRAMS
C00015 00006 ⊃ AJT FILES
C00018 00007 ⊃ Now we use the magic macro to generate our tables
C00020 00008 ⊃ This routine types the commands
C00022 00009 ⊃ This routine outputs the illegal file names.
C00025 00010 ⊃ Now we get down to business
C00027 ENDMK
C⊗;
BEGIN "PURGE"
LET DEFINE=REDEFINE;
STRING ARRAY UFD_FILE, UFD_EXT[1:1000];
INTEGER UFDLENGTH;
DEFINE DSK="1", LPT="2", CRLF="('15&'12)", ⊃="COMMENT";
⊃ make CVXSTR honest;
SIMPLE STRING PROCEDURE CVXX(INTEGER VAL);
BEGIN STRING FOO;
INTEGER I;
FOO ← CVXSTR(VAL);
FOR I ← LENGTH(FOO) STEP -1 UNTIL 1 DO IF FOO[I FOR 1]≠" " THEN DONE;
RETURN(IF I THEN FOO[1 FOR I] ELSE "");
END;
⊃ read ufd file;
SIMPLE PROCEDURE UFDREAD;
BEGIN INTEGER EOF, SIXBIT, FLAG;
OPEN(DSK,"DSK",8,2,0,128,EOF,EOF);
LOOKUP(DSK,"SYS HE.UFD[1,1]",FLAG);
IF FLAG THEN USERERR(0,0,"UFD LOOKUP ERROR");
UFDLENGTH ← 0;
WHILE TRUE DO
BEGIN
SIXBIT ← WORDIN(DSK);
IF EOF THEN DONE;
IF SIXBIT THEN
BEGIN
UFD_FILE[UFDLENGTH←UFDLENGTH+1] ← CVXX(SIXBIT);
UFD_EXT[UFDLENGTH] ← CVXX(WORDIN(DSK) LAND
'777777000000);
END ELSE WORDIN(DSK);
WORDIN(DSK);
WORDIN(DSK);
END;
CLOSE(DSK);
END;
DEFINE EXT_LENGTH="25";
PRELOAD_WITH "SAI","FAI","MAC","F4","REL","DMP","","LST","WRU",
"PUB","FND","TRP","DAT","???","TXT","HDR","SEG","LNK","RUN","AUX",
"DOC","CMD","GUN","HAL","TRJ","YEL";
SAFE STRING ARRAY COMMON_EXT[0:EXT_LENGTH];
DEFINE SAI="1", FAI="2", MAC="4", F4="'10", REL="'20", DMP="'40", NUL="'100",
LST="'200",WRU="'400",PUB="'1000",FND="'2000",TRP="'4000",
DAT="'10000",CAL="'20000",TXT="'40000",HDR="'100000",SEG="'200000",
LNK="'400000",RUN="'1000000",AUX="'2000000",DOC="'4000000",
CMD="'10000000",GUN="'20000000",HAL="'40000000",TRJ="'100000000",
YEL= ↓⊂;⊃AAAβ↓AAA∩aα
&"B%2¬Ki
6>∀(b⊗b%Z&uαd
:⊃α
⊃l4*$*~&:*α:V2dJ:⊃u∪1 mλJ&:∩-Aα>→∧rV21∧*bQ9Xh(0D&&C'MβO→βS#*β7π∨N→β7π∨∪=β←FK∂!β&+≠';/→β∨?}!β≠'f+Ml4Ph*∩⊗4J:∃αEAuλ4PHD$&\ZAα~Lb⊗MlhP4($I α⊗∩<)α~>db>↑⊗∪X4(4PJji"$!2~εJZJ⊗1J`$$DL"V66JαJε&"αR=α4zJ∞∃¬~f6
|bMl4PJji"Lr:⊗Ie~ε%.∀*1%0Iλ&⊗∩<)α~>db>↑⊗∩α&:NL"∃α⊗$:∃αN≤
::⊗∪X4(&UQ"⊗∩<)2NεJZJ⊗1\"6A%`HD&⊗$:∃α~|b2>↑-⊃α6εLqαBJ|:Jε5Xh(&jRB6&N,"≥2NI.J⊗bI0$DL*∩≡∃∧2>22⎇:⊗Iα-"&2&%IαJ>-"&:⊗≠X4(&UQ"∞>u"J12≤
%.J,a%0$λJ⊗∩≡*α~>2dz↑⊗I∧~>:R∀z1αB∀z≡JεkX4(&UQ"N∞r⊗I2≤
%.J,a%0$λJ⊗∩≡*α~>2dz↑⊗I∧
∞∞>lz∩εRLz9αJ⎇*R&:-→l4(hP$$E∧~VJZ*α~&R$*Il4Ph(&jRB∞VJ4)2NεJZJ⊗1\"6A%`HD&∞-∩Z∃α4JRR⊗∩α6ε&rαBJ>=∩ε5lhP&jiDj&N∞-⊃2NεJZJ⊗1J`$D&≥*JZ∃∧2&RR-⊃αVRLb&Re¬αJ>≡∀
6MlhP&jiD~VJ~I2~εJZJ⊗1J`$D&≥*JZ∃∧2&RR-⊃α~εLaαJ>-"&:⊗≠X4(4PH$EαD
:⊃>-J∃α6|r&R>∪X4(4PJji"D)2NεJI0$$λJ"ε:"z⊗f∃∧j>:&$zI↓"%*6Aα|qαmEc~u%lhP&jiDB⊗&:M!2~εJZJ⊗1J`$D&4
&1α≤z∩∃α4zIα"+X4(&UQ"∩>D)2:VbI0$$λJ∞>6∧J2⊗Mbα2>ε%→1αεt!αNε4*Mα"*α>9α≥JMl4Ph($$
α>
*,~QαN,:6⊗:$*I↓5∧∩eα≥rα≡Jε∧)l4(hP&jiEαJ>Rzb≡V9J`$$DMαJ>R⎇"fB∃∧2&2∃∧2>Iα=*:2=Xh(&jRB≡V:dy2NεJZJ⊗1\"6A%`HD&N,:6⊗:$*Il4PJji"≤
&∩&~bNε%]∩⊗1%`HD$&$JNB2
IαBε≤Zε≡∃Xh(&jRBNεZ∀*M2NI.J⊗bI0$DHJ~&2*α"ε:$b&:≥Xh(&jRBNε&≤*I2NI.J⊗bI0$DHJN⊗J4J∞∃lhP&jiD2>JN-⊃2NεJZJ⊗1J`$D$Lj>J∃¬~⊗JZL~∃l4PJji"=*:~εJb~ε%]∩⊗1%`HD$&4
&1α≤*JZ&≤)l4(MRi"N≤*:∃2≤
%.J,a%0$λH&∞J⎇~MαJ,2⊗J⊗t~∃l4PJji"dJ:∃2≤
%.J,a%0$λH&2&t)α~&%"&:≥Xh(&jRB2&:4*I2NI.J⊗bI0$DHJ2&:*α∩εR
αNRJ,~Q9lhP&jiEαJ>Qe~ε%.∀*1%0Iλ$&B∀zR>RMα∃αN%∩V∞QsX4(&UQ"6ε¬→E2NI.J⊗bI0$DHJBεJ≤J:≥lhP&jiDjεBM∩bNε%]∩⊗1%`HD$&l
BB&t9l4(MRi"N,∩JM2$z
%0HHD&N,∩J>V$J:∃αdJNR&t9αε:"αbJ⊗3X4(&UQ"NR∃*∞Q2$z
%0HHD&∩
"¬αN%∩V∞R-∩∃α∩|~V6⊗u"εR&|ql4(MRi"∞|jε:⊃d">
%`H$D&≤z66εt!α∩>≥*6⊗:$
R&>sX4(4PH$Eα-"&2&%IαBε≤Zε≡∃∧
:⊃α%∩&Z⊗∩↓5α>rαV∩AXh(4(λJji"LJ∩JYe~ε%.$jA.↑∃)%0$λJ:⊗]∧"J&Z-⊃α~>∩αVR&dJReα∧
∞.ε<)l4(λJji"D*VR&bbNε%]:JU%`HD&"r⊃>⊗L)αVRLb&Re¬∩>VRLr⊗MlhPD&jRBJV:LI2:VbI0$$λJ∩=α4J2∃α4zIαJ,r:&::α&&∩∃1l4(λJji"D*6ε∞∩b:V1J`$$DLjε∞J⎇→α~>∩αVR&dJReα∀zVR&t*Ml4P0$$
α∞ε6-∩¬α∞b&
J
"&>9Xh(4(MRi"∞j⊗J¬e~ε%.$jA.↑∃)%0$λJ∞ε6-∩¬α∞b&
J
"&>9¬αJ>≡∀
5l4PJji"≤z
6ε"bNε%]∩⊗1%`HD&∞j⊗J¬¬*R&2M"eαJ⎇*R&:-→l4(MRi"∩
"¬2:,a%0$Iλ&∞εdJ
Jε$J>9α$
R¬α4zIα∞j⊗J¬Xh(&jRB∩εR⊃2:VbI0$$λJ∞ε2L∩JεRLz9α∩
"¬α~⎇⊃α:⊗<~ε5lhP4($I α⊗∩<)αZ⊗∀J~&⊗∪X4(4PJji"4*J&~JbNε%\"6A%`HD&2Lr∃αZ-∩&~&-⊃l4(hP$D&≤Beα~Lb⊗M↓Dz
M9∧z9αV%↓$4(hPD&jRB>AEdjε
.∀*1%0Iλ&N>∀*1α>∧*JεR⎇⊃l4(λJji"2⊃2NI.∩6αZ2:-]∩V9%aλ&∩JM2⊗Iα4zIα~|~VMα¬∩>≡Jil4(λJji"<J2~>~bNε%\"6A%`HD&~|~VMα¬∩>≡Jil4(λJji"<J2⊗f*bNε%\"6A%`HD&∞⎇∩:⊗I∧2&:∩-⊃αBJ|:Jε5Xh(D&UQ"RZ≤*I2NI%0$Iλ&~&d)α∞>lj>9α$yαε~"b≡&24z
2≡Lb⊗f∃Xh(D&UQ"NR\"JY2≤
%.∩m↓%0$λI⎇⎇⎇{yl4(λJji"≤
2∩J2bNε%\"6A%`HD%⎇{y⎇⎇lhPD&jRB"ε:%~∃2NI%0$Iλ&~&d)α∞>lj>9α$yαNR\"JYαr⊃α∞b∩JYXh(D&UQ"∞εbb2:-]∩V9%`HD&J,qα∞>u"J>1∧2&2⊗~α~>I∧~ε2∩∃1l4(λJji"≥"-22tY.JVrI0$DM∩V9α≤z:RJ|aα~&d*Mα~⎇⊃αNR\"JYlhPD&jRB:⊗↑≤
52NI.∩6αI0$DLr⊗]α≤
6⊗J
α∞ε2L∩JεRLz9αB∀z≡JεkX4(4PHD&R|⊃α~&d*MβK/β3π∂.!βe∧
*Q↓jα>9α,"Al4Ph(D&UQ"∞>dzI2NI.∩6αI0$DL~>2>∩αJ⊗∞|::&j-⊃l4(hP$D&dzUα~Lb⊗MlhP4(&UQ"6ε%∩&a24
%.J,a%0$λJ6εR∀Jaαε∀JR!9¬*R&2M"eαJ⎇*R&:-→l4(MRi"Z,~Q2~I.J⊗bI0$DM2⊗∞R⎇⊃αεJM"!9α-"&2&%IαJ>-"&:⊗≠X4(&UQ"NεLb& 2≤
%.J,a%0$λJεJ5¬*R&2M"eαJ⎇*R&:-→l4(MRi""r∩e2≤
%.∩m↓%0$λJεJ5∧~>:R∀z1αB∀z≡JεkX4(&UQ""εt" 2NI.∩6αI0$DL
J5α≤z:RJ|aαBJ|:Jε5Xh(&jRB&:R4
2~I.J⊗bI04(MRi"f,b2>]e~ε%.$
Q%0Iλ&εJjαR⊗N$J:≥α¬∩>≡Jil4(MRi"
e*∃2NI.∩ε"I0$DL
J5α$*NR&t9αBJ|:Jε5Xh(&jRB↑εZ*bNε%J`4(&UQ"6>4)2NεJZ∩6AJ`4(&UQ"6>$*12NI.∩6αI0$DLj>∩⊗bα
V&d"⊗IlhP&jiE2⊗∞R⎇⊃2NεJI0$$λJZ⊗∞$zIα∩,~2εJ
"&>:≠X4(&UQ""ε≤AAY24
%.J,a%04PJji",r∩⊗Id2ε%.∀*1%0Iλ&εJjαVR&dJReα∀zVR&t*Ml4PJji"%∩&Z∃d2ε%.∀*1%0Hh(&jRBf⊗2zb∩6AJ`4(&UQ"εJjb:V1J`4(&UQ"εJm~>12u*1%0hP&jiE"Jε)e~ε%%`h(&jRBR"J⎇92NεJI04( ZZ(TOWER,NUL), ⊃ TOWER OF HANOI PROGRAMS;
ZZ(NLF,SAI+DMP+YEL+TRJ),
ZZ(HANOI,NUL+HAL+TRJ),
⊃ RPO FILES - ON UDP (OBSOLETE);
⊃ ZZ(SIMPLE,SAI+DMP), ⊃ SIMPLE BODY RECOGNIZER;
⊃ ZZ(SIMAUX,SAI), ⊃ REST OF SIMPLE;
⊃ ZZ(DPDP,F4+REL), ⊃ SIMPLE UTILITY ROUTINES;
⊃ ZZ(MODELS,TRP), ⊃ SIMPLE'S PROTOTYPES;
⊃ ZZ(COMPLX,NUL), ⊃ COMPLEX FILES;
⊃ ZZ(CPXSYM,AUX),
⊃ ZZ(RECOG,SAI+AUX+DMP+CMD), ⊃ RECOGNIZER;
⊃ ZZ(RECOG0,SAI),
⊃ ZZ(RECOG1,SAI),
⊃ ZZ(RECOG2,SAI),
⊃ ZZ(RECOG3,SAI),
⊃ ZZ(RECDPY,SAI+HDR),
⊃ ZZ(RECCOM,AUX),
⊃ ZZ(SEGMEN,SAI+AUX+DMP+CMD), ⊃ SEGMENTER;
⊃ ZZ(SEG0,SAI),
⊃ ZZ(SEG1,SAI),
⊃ ZZ(SEG2,SAI),
⊃ ZZ(SEGDPY,SAI+HDR),
⊃ ZZ(SEGCOM,AUX),
⊃ ZZ(PREDIC,SAI+AUX+DMP+CMD), ⊃ PREDICTOR;
⊃ ZZ(PRED0,SAI+FAI+AUX),
⊃ ZZ(PRED1,FAI),
⊃ ZZ(PRED2,FAI),
⊃ ZZ(PRED3,FAI),
⊃ ZZ(PRED4,FAI),
⊃ ZZ(PRED5,FAI),
⊃ ZZ(PRECOM,AUX),
⊃ WAP FILES;
⊃ ZZ(WALDSK,SAI+DMP),
⊃ ZZ(WALEYE,SAI+DMP),
⊃ ZZ(WALDRV,SAI+DMP),
⊃ ZZ(WAL,CMD),
⊃ ZZ(WEC,CMD),
⊃ ZZ(LINE,FND),
⊃ ZZ(IMAGE,SAI),
⊃ AJT FILES;
ZZ(COLOUR,SAI+DMP), ⊃ NEW COLOUR PROGRAM;
ZZ(PROTO,SAI), ⊃ DISPLAYS GUNNAR PROTO FILES;
⊃ ZZ(BLK0,DAT), ⊃ PICTURE FILES FOR STEREO;
⊃ ZZ(BLK1,DAT),
⊃ ZZ(BLK2,DAT),
⊃ ZZ(BLK3,DAT),
⊃ GENERAL FILES maintained by KKP;
ZZ(WHLTST,SAI+DMP), ⊃ COLOR WHEEL TEST PROGRAM;
ZZ(DACTST,SAI+DMP), ⊃ DAC TEST PROGRAM;
ZZ(SERTST,SAI+DMP), ⊃ TSERVO TEST PROGRAM;
ZZ(TBLTST,SAI+DMP), ⊃ TURNTABLE TEST PROGRAM;
ZZ(POTCAL,SAI), ⊃ POT CALIBRATION ROUTINE;
ZZ(APPLY,SAI+DOC+DMP+PUB), ⊃ OPERATOR TESTING PROGRAM;
ZZ(FLIST,SAI+DOC+DMP), ⊃ FILE LISTER ;
ZZ(PREAMB,SAI+TXT), ⊃ GLOBAL MODEL DEFINITIONS;
ZZ(EDGCUR,PUB+DOC), ⊃ EDGE FOLLOWER DOCUMENTATION;
ZZ(HAND,WRU), ⊃ HAND/EYE MONITOR DOCUMENTATION - I;
ZZ(MESSAG,WRU), ⊃ DITTO - PART II;
ZZ(MONITR,WRU), ⊃ DITTO - PART III;
ZZ(MACROS,NUL), ⊃ LOAD MACROS FOR II SYSTEM;
ZZ(PURGE,SAI+DMP), ⊃ THIS PROGRAM;
ZZ(GLORPG,NUL), ⊃ COMPILE FILE FOR ALL HE PROGRAMS;
ZZ(SAIRPG,NUL), ⊃ COMPILE FILE FOR OTHER SAIL PROGRAMS;
⊃ ZZ(GLBNEW,SEG), ⊃ SAVE SEGMENT FOR II (OBS. ON UDP);
ZZ(EDGLIB,REL), ⊃ LIBRARY FOR EDGE AND CURVE;
ZZ(PREMAK,SAI+DMP), ⊃ GENERATES COMMENTLESS PREAMBLE FILE;
⊃ ZZ(CALPLT,SAI+DMP), ⊃ PLOTTER DUMP ROUTINE FOR EDGE POINTS;
⊃ ZZ(PLOTS,FAI+REL), ⊃ SPECIAL SAILABLE CALCOMP ROUTINES (UDP);
ZZ(CAMDRV,NUL+DMP), ⊃ NEW CAMERA MOVER;
ZZ(DPYSUB,HDR), ⊃ DISPLAY HEADER FILE;
⊃ ZZ(SQRT,FAI+REL), ⊃ SQUARE ROOT ROUTINE;
ZZ(SAITRG,NUL+FAI+REL), ⊃ SAIL TRIG FUNCTIONS - HEAD AND TEXT;
⊃ ZZ(HASH,FAI+REL), ⊃ HASH CODER FOR MAKING NEW SEGMENT;
ZZ(PICTUR,SAI), ⊃ PICTURE INPUT PROGRAM;
ZZ(SPICT,SAI+DMP), ⊃ STEREO INPUT PROGRAM;
ZZ(HESLOG,NUL), ⊃ HAND/EYE LOG MESSAGES;
ZZ(GCREF,FAI+DMP) ⊃ GLOBAL CREF PROGRAM;
⊃ ZZ(MAKSEG,SAI+DMP) ⊃ MAKE A NEW GLOBAL SEGMENT (OBS. ON UDP);
";
DEFINE FILES="83"; ⊃ This is the number of good files;
⊃ Now we use the magic macro to generate our tables;
DEFINE ZZ(A,B)="""A""";
PRELOAD_WITH XX;
SAFE STRING ARRAY GOOD_FILES[1:FILES];
DEFINE ZZ(A,B)="B";
PRELOAD_WITH XX;
SAFE INTEGER ARRAY MORE_EXT[1:FILES];
⊃ This routine is true if one of the common extensions for file
GOOD_FILE[I] is E;
SIMPLE BOOLEAN PROCEDURE EQUEXT(STRING E; INTEGER I);
BEGIN INTEGER J;
FOR J ← 0 STEP 1 UNTIL EXT_LENGTH DO
IF BIT(I, 1 LSH J)∧EQU(COMMON_EXT[J],E) THEN RETURN(TRUE);
RETURN(FALSE);
END;
⊃ This is the LPT output routine;
SIMPLE PROCEDURE LPTOUT(REFERENCE STRING FOO);
OUT(LPT,FOO);
⊃ This is the TTY output routine;
BOOLEAN III; ⊃ TRUE if we are on a display;
INTEGER TTY_OUT;
DEFINE TTY_MAX="25"; ⊃ Pause after this many lines if on a dpy;
SIMPLE PROCEDURE TTYOUT(REFERENCE STRING FOO);
BEGIN
IF III∧TTY_OUT≥TTY_MAX THEN
BEGIN
OUTSTR("TYPE <CR> TO CONTINE");
INCHWL;
TTY_OUT ← 0;
END;
OUTSTR(FOO);
TTY_OUT ← TTY_OUT + 1;
END;
⊃ This is the null output routine;
SIMPLE PROCEDURE NULLOUT(REFERENCE STRING FOO);
RETURN;
⊃ This routine types the commands;
SIMPLE PROCEDURE COMMANDS;
BEGIN
OUTSTR(CRLF&"COMMANDS ARE:"&CRLF);
OUTSTR("GOOD_FILES→TTY GOOD_FILES→LPT BAD_FILES→TTY BAD_FILES→");
OUTSTR("LPT DELETE_BAD_FILES"&CRLF);
OUTSTR(" 1<CR> 2<CR> 3<CR> 4<CR>");
OUTSTR(" 5<CR>"&CRLF);
END;
⊃ This routine outputs the list of good files;
SIMPLE PROCEDURE OUT_GOOD(PROCEDURE DEVICE);
BEGIN STRING FOO,Z;
INTEGER I, J;
DEVICE(Z←"GOOD FILES ARE:"&CRLF);
FOR I ← 1 STEP 1 UNTIL FILES DO
BEGIN
FOO ← GOOD_FILES[I];
IF MORE_EXT[I] THEN FOR J←0 STEP 1 UNTIL EXT_LENGTH DO
IF BIT(I,1 LSH J)∧J≠NULLIND THEN
FOO←FOO&"."&COMMON_EXT[J]&" ";
DEVICE(Z←FOO&CRLF);
END;
DEVICE(Z←CRLF);
END;
BOOLEAN BADFLG; ⊃ TRUE if OUT_BAD called;
BOOLEAN ARRAY BAD_FLAGS[1:1000];
⊃ This routine outputs the illegal file names.
It also generates a table of flags indicating the illegal files;
SIMPLE PROCEDURE OUT_BAD(PROCEDURE DEVICE);
BEGIN STRING E, F, FOO, Z;
INTEGER I, J, COUNT;
BADFLG ← TRUE;
DEVICE(Z←"ILLEGAL FILES ARE:"&CRLF);
COUNT ← 0;
FOO ← NULL;
FOR I ← 1 STEP 1 UNTIL UFDLENGTH DO
BEGIN
F ← UFD_FILE[I];
E ← UFD_EXT[I];
FOR J←1 STEP 1 UNTIL FILES DO
IF EQU(F,GOOD_FILES[J])∧EQUEXT(E,J) THEN DONE;
IF BAD_FLAGS[I] ← J>FILES THEN
BEGIN
IF COUNT≥4 THEN
BEGIN
DEVICE(Z←FOO&CRLF);
FOO ← NULL;
COUNT ← 0;
END;
FOO ← FOO&((F&(IF LENGTH(E) THEN "."&E ELSE "")&
" ")[1 FOR 12]);
COUNT ← COUNT+1;
END;
END;
DEVICE(Z←FOO&CRLF&CRLF);
END;
⊃ This routine deletes illegal files;
SIMPLE PROCEDURE DELETEX;
BEGIN BOOLEAN FLAG;
STRING E, F;
INTEGER I;
IF ¬BADFLG THEN OUT_BAD(NULLOUT);
FOR I←1 STEP 1 UNTIL UFDLENGTH DO IF BAD_FLAGS[I] THEN
BEGIN
F ← UFD_FILE[I];
E ← UFD_EXT[I];
F ← F&(IF E THEN "."&E ELSE "");
LOOKUP(DSK,F,FLAG);
IF ¬FLAG THEN RENAME(DSK,"",0,FLAG);
OUTSTR(F&(IF FLAG THEN " NOT" ELSE "")&" DELETED"&CRLF);
BAD_FLAGS[I] ← FALSE;
END;
UFDREAD; ⊃ Read new list of files;
END;
⊃ Now we get down to business;
INTEGER COM, EOF;
LABEL LOOP;
BADFLG ← FALSE;
UFDREAD;
COMMANDS;
START_CODE DEFINE TTYUUO="'51000000000";
SETOM 1;
TTYUUO 6,1;
SETZM III;
TLNE 1,'420000;
SETOM III;
END;
LOOP: OUTSTR(CRLF&"COMMAND IS ");
COM ← CVD(INCHWL);
IF COM LAND 1 THEN TTY_OUT←0 ELSE OPEN(LPT,"LPT",0,0,2,128,EOF,EOF);
CASE COM-1 OF
BEGIN
OUT_GOOD(TTYOUT);
OUT_GOOD(LPTOUT);
OUT_BAD(TTYOUT);
OUT_BAD(LPTOUT);
BEGIN
IF ¬BADFLG THEN
BEGIN
OUTSTR("WANT A LIST OF ILLEGAL FILES FIRST?"&CRLF);
IF INCHWL≠"N" THEN GO TO LOOP;
END;
DELETEX;
END;
END;
IF ¬(COM LAND 1) THEN RELEASE(LPT);
IF III THEN COMMANDS;
GO TO LOOP;
END;